﻿#ifndef __SS_CHECKSUM_H__
#define __SS_CHECKSUM_H__
#include "../ssBaseDefine.h"

#define MOD_ADLER 65521

namespace StarSeeker
{

u8 inline BCC(const u8 *data, u32 len)
{
	u8 ret = 0;
	for (u32 i = 0; i < len; ++i)
	{
		ret ^= data[i];
	}
	return ret;
}
u8 inline BCC(const char *data, u32 len)
{
	return BCC((const u8*)data, len);
}

u32 inline Adler32(const u8 *data, u32 len)
{
	u32 a = 1, b = 0;
	for (u32 index = 0; index < len; ++index)
	{
		a = (a + data[index]) % MOD_ADLER;
		b = (b + a) % MOD_ADLER;
	}
	return (b << 16) | a;
}
u8 inline Adler32(const char *data, u32 len)
{
	return Adler32((const u8*)data, len);
}

}
#endif
